/* Copyright 2018 JDCLOUD.COM

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http:#www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

JCLOUD MONITOR API
monitor API

OpenAPI spec version: v2
Contact: 

NOTE: This class is auto generated by the jdcloud code generator program.
*/


#ifndef MonitorClient_h
#define MonitorClient_h


#import <JDCloudOCSDKCore/JDCloudOCSDKCore.h>
#import <JDCloudOCSDKMonitor/MonitorApiModel.h>

@interface MonitorClient : NSObject<JDCloudClient>{
    @private
    NSString* _userAgent;
    NSString* _serviceName;
    NSString* _version;
    }

    @property (strong,readonly,nonatomic) NSString* userAgent;

    @property (strong,readonly,nonatomic) NSString* serviceName;

    @property (strong,readonly,nonatomic) NSString* version;

    @property (strong,nonatomic) NSString* contentType;

    @property (strong,nonatomic) Credential* credential;

    @property (strong,nonatomic) SDKEnvironment* sdkEnvironment;

    @property (strong,nonatomic) NSMutableDictionary* customHeader;

    @property  (strong,nonatomic) NSString* httpRequestProtocol;

    -(void) addCustomerHeaderWithKey:(NSString*) key
    value:(NSString*) value;

    -(id)initWithGlobalConfig;

    -(id)initWithCredential:(Credential*)credential
    sdkEnvironment:(SDKEnvironment*)sdkEnvironment;
    -(id)initWithCredential:(Credential*)credential;
    /**
    describeMetricData sync request
    @param describeMetricDataRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeMetricDataResponse` the request response data model
    */
    -(NSDictionary*) describeMetricDataSyncWithRequest:(MonitorDescribeMetricDataRequest*) describeMetricDataRequest;

    -(void)describeMetricDataAsyncWithRequest:(MonitorDescribeMetricDataRequest*) describeMetricDataRequest
    completionHandler:(void(^)(int statusCode,MonitorDescribeMetricDataResponse* _Nullable describeMetricDataResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createAlarm sync request
    @param createAlarmRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createAlarmResponse` the request response data model
    */
    -(NSDictionary*) createAlarmSyncWithRequest:(MonitorCreateAlarmRequest*) createAlarmRequest;

    -(void)createAlarmAsyncWithRequest:(MonitorCreateAlarmRequest*) createAlarmRequest
    completionHandler:(void(^)(int statusCode,MonitorCreateAlarmResponse* _Nullable createAlarmResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeServices sync request
    @param describeServicesRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeServicesResponse` the request response data model
    */
    -(NSDictionary*) describeServicesSyncWithRequest:(MonitorDescribeServicesRequest*) describeServicesRequest;

    -(void)describeServicesAsyncWithRequest:(MonitorDescribeServicesRequest*) describeServicesRequest
    completionHandler:(void(^)(int statusCode,MonitorDescribeServicesResponse* _Nullable describeServicesResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeMetricsForAlarm sync request
    @param describeMetricsForAlarmRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeMetricsForAlarmResponse` the request response data model
    */
    -(NSDictionary*) describeMetricsForAlarmSyncWithRequest:(MonitorDescribeMetricsForAlarmRequest*) describeMetricsForAlarmRequest;

    -(void)describeMetricsForAlarmAsyncWithRequest:(MonitorDescribeMetricsForAlarmRequest*) describeMetricsForAlarmRequest
    completionHandler:(void(^)(int statusCode,MonitorDescribeMetricsForAlarmResponse* _Nullable describeMetricsForAlarmResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeAlarmContacts sync request
    @param describeAlarmContactsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeAlarmContactsResponse` the request response data model
    */
    -(NSDictionary*) describeAlarmContactsSyncWithRequest:(MonitorDescribeAlarmContactsRequest*) describeAlarmContactsRequest;

    -(void)describeAlarmContactsAsyncWithRequest:(MonitorDescribeAlarmContactsRequest*) describeAlarmContactsRequest
    completionHandler:(void(^)(int statusCode,MonitorDescribeAlarmContactsResponse* _Nullable describeAlarmContactsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeAlarmHistory sync request
    @param describeAlarmHistoryRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeAlarmHistoryResponse` the request response data model
    */
    -(NSDictionary*) describeAlarmHistorySyncWithRequest:(MonitorDescribeAlarmHistoryRequest*) describeAlarmHistoryRequest;

    -(void)describeAlarmHistoryAsyncWithRequest:(MonitorDescribeAlarmHistoryRequest*) describeAlarmHistoryRequest
    completionHandler:(void(^)(int statusCode,MonitorDescribeAlarmHistoryResponse* _Nullable describeAlarmHistoryResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeAlarm sync request
    @param describeAlarmRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeAlarmResponse` the request response data model
    */
    -(NSDictionary*) describeAlarmSyncWithRequest:(MonitorDescribeAlarmRequest*) describeAlarmRequest;

    -(void)describeAlarmAsyncWithRequest:(MonitorDescribeAlarmRequest*) describeAlarmRequest
    completionHandler:(void(^)(int statusCode,MonitorDescribeAlarmResponse* _Nullable describeAlarmResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    lastDownsample sync request
    @param lastDownsampleRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `lastDownsampleResponse` the request response data model
    */
    -(NSDictionary*) lastDownsampleSyncWithRequest:(MonitorLastDownsampleRequest*) lastDownsampleRequest;

    -(void)lastDownsampleAsyncWithRequest:(MonitorLastDownsampleRequest*) lastDownsampleRequest
    completionHandler:(void(^)(int statusCode,MonitorLastDownsampleResponse* _Nullable lastDownsampleResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteAlarms sync request
    @param deleteAlarmsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteAlarmsResponse` the request response data model
    */
    -(NSDictionary*) deleteAlarmsSyncWithRequest:(MonitorDeleteAlarmsRequest*) deleteAlarmsRequest;

    -(void)deleteAlarmsAsyncWithRequest:(MonitorDeleteAlarmsRequest*) deleteAlarmsRequest
    completionHandler:(void(^)(int statusCode,MonitorDeleteAlarmsResponse* _Nullable deleteAlarmsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeProductsForAlarm sync request
    @param describeProductsForAlarmRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeProductsForAlarmResponse` the request response data model
    */
    -(NSDictionary*) describeProductsForAlarmSyncWithRequest:(MonitorDescribeProductsForAlarmRequest*) describeProductsForAlarmRequest;

    -(void)describeProductsForAlarmAsyncWithRequest:(MonitorDescribeProductsForAlarmRequest*) describeProductsForAlarmRequest
    completionHandler:(void(^)(int statusCode,MonitorDescribeProductsForAlarmResponse* _Nullable describeProductsForAlarmResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    updateAlarm sync request
    @param updateAlarmRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `updateAlarmResponse` the request response data model
    */
    -(NSDictionary*) updateAlarmSyncWithRequest:(MonitorUpdateAlarmRequest*) updateAlarmRequest;

    -(void)updateAlarmAsyncWithRequest:(MonitorUpdateAlarmRequest*) updateAlarmRequest
    completionHandler:(void(^)(int statusCode,MonitorUpdateAlarmResponse* _Nullable updateAlarmResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    enableAlarms sync request
    @param enableAlarmsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `enableAlarmsResponse` the request response data model
    */
    -(NSDictionary*) enableAlarmsSyncWithRequest:(MonitorEnableAlarmsRequest*) enableAlarmsRequest;

    -(void)enableAlarmsAsyncWithRequest:(MonitorEnableAlarmsRequest*) enableAlarmsRequest
    completionHandler:(void(^)(int statusCode,MonitorEnableAlarmsResponse* _Nullable enableAlarmsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    putMetricData sync request
    @param putMetricDataRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `putMetricDataResponse` the request response data model
    */
    -(NSDictionary*) putMetricDataSyncWithRequest:(MonitorPutMetricDataRequest*) putMetricDataRequest;

    -(void)putMetricDataAsyncWithRequest:(MonitorPutMetricDataRequest*) putMetricDataRequest
    completionHandler:(void(^)(int statusCode,MonitorPutMetricDataResponse* _Nullable putMetricDataResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeMetrics sync request
    @param describeMetricsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeMetricsResponse` the request response data model
    */
    -(NSDictionary*) describeMetricsSyncWithRequest:(MonitorDescribeMetricsRequest*) describeMetricsRequest;

    -(void)describeMetricsAsyncWithRequest:(MonitorDescribeMetricsRequest*) describeMetricsRequest
    completionHandler:(void(^)(int statusCode,MonitorDescribeMetricsResponse* _Nullable describeMetricsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeAlarms sync request
    @param describeAlarmsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeAlarmsResponse` the request response data model
    */
    -(NSDictionary*) describeAlarmsSyncWithRequest:(MonitorDescribeAlarmsRequest*) describeAlarmsRequest;

    -(void)describeAlarmsAsyncWithRequest:(MonitorDescribeAlarmsRequest*) describeAlarmsRequest
    completionHandler:(void(^)(int statusCode,MonitorDescribeAlarmsResponse* _Nullable describeAlarmsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    /**
    monitor common sync request
    @param  jdcloudDataRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
    */
    -(NSDictionary*) monitorCommonSyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                           url:(NSString*) url
                                        method:(NSString*) method;

    -(void)monitorCommonAsyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                  url:(NSString*) url
                               method:(NSString*) method
                    completionHandler:(void(^)(int statusCode, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    @end


    #endif /* MonitorClient_h */
